本文同步發表於小弟自架網站:微確幸資訊站
原始的問題為將學生亂數分成A、B、C三組:
姓名 | 組別 | |
---|---|---|
0 | 黃文欣 | B |
1 | 徐翠洋 | C |
2 | 林欣虹 | A |
3 | 吳語群 | B |
4 | 詹俊宏 | A |
5 | 林素元 | A |
6 | 洪偉誠 | B |
7 | 黃玉廷 | C |
8 | 黃瓊瑞 | C |
9 | 陳奕季 | B |
目標是分組後的學生,新增一欄「小組成員」:
姓名 | 組別 | 小組成員 | |
---|---|---|---|
0 | 黃文欣 | B | [黃文欣, 吳語群, 洪偉誠, 陳奕季] |
1 | 徐翠洋 | C | [徐翠洋, 黃玉廷, 黃瓊瑞] |
2 | 林欣虹 | A | [林欣虹, 詹俊宏, 林素元] |
3 | 吳語群 | B | [黃文欣, 吳語群, 洪偉誠, 陳奕季] |
4 | 詹俊宏 | A | [林欣虹, 詹俊宏, 林素元] |
5 | 林素元 | A | [林欣虹, 詹俊宏, 林素元] |
6 | 洪偉誠 | B | [黃文欣, 吳語群, 洪偉誠, 陳奕季] |
7 | 黃玉廷 | C | [徐翠洋, 黃玉廷, 黃瓊瑞] |
8 | 黃瓊瑞 | C | [徐翠洋, 黃玉廷, 黃瓊瑞] |
9 | 陳奕季 | B | [黃文欣, 吳語群, 洪偉誠, 陳奕季] |
import pandas as pd
import numpy as np
# 先用亂數廠生的姓名做一個Dataframe
df = pd.DataFrame({'姓名':['黃文欣', '徐翠洋', '林欣虹', '吳語群',
'詹俊宏', '林素元', '洪偉誠', '黃玉廷', '黃瓊瑞', '陳奕季'],
})
# 準備將所有的學生做ABC的分組
group = 'ABC'
# df新增一個「組別」的欄位,由ABC亂數產生,長度為df
df["組別"] = np.random.choice(list(group), size=len(df))
df
# 將df以組別來分類後,所有的姓名轉成list,並把這個序列的命名改成「小組成員」
s = df.groupby('組別').姓名.agg(list).rename('小組成員')
print(type(s))
s
# 將原來的df串接上面做好的s
df = pd.merge(df, s, on='組別', how='left')
df
這樣就完成我們的目標了!!